package com.example.demo.algorithm;

import java.util.Arrays;

/**
 * 项目名称：hello-6
 * 类 名 称：XuanzeSort  simpleSelectionSort
 * 类 描 述：简单选择排序，不稳定的排序
 * 创建时间：2020/11/25 19:24
 * 创 建 人：wangsheng
 * 选择排序主要是找出最小的进行交换，
 * 为何不是稳定的：（5(1)，5(2)，1）
 * 排序结果：（1，5(2)，5(1)）本来5(1)在5(2)前边，但是选择排序数值1和5交换了，稳定性改变了
 * 主要是以第1个为基准，从第二个开始直到最后一个遍历寻找最小值，找到最小值跟第一个交换，
 * 以此类推：第二个为基准，从第三个到最后一个寻找最小值
 */
public class SelectionSort {

    public static void main(String[] args) {
        int[] array = new int[]{6, 5, 0, 3, 2, 1};
        //趟数 由于简单选择排序比较的是当前i和的后一个，所以当前趟数length-1就够用了
        for (int i = 0; i < array.length - 1; i++) {
            //i 代表每轮选择最小元素要交换到的目标索引
            int s = i;
            // 因为简单选择排序是比较下一个，所以从s+1开始，右临界为数组的最后一个元素
            for (int j = s + 1; j < array.length; j++) {
                System.out.println("********************");
                if (array[s] > array[j]) {
                    // 记下最小值的位置
                    s = j;
                }
            }
            // 如果s=i 则证明接下来的循环没有找到最小值，所以不用做处理；
            // 找到了不相同，所以才交换
            if (s != i) {
                swap(array, s, i);
            }
            System.out.println("第" + (i + 1) + "躺：" + Arrays.toString(array));
        }
        System.out.println("最终结果：" + Arrays.toString(array));
    }

    public static void swap(int[] array, int i, int j) {
        int temp = 0;
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}
